Puji syukur ke hadirat Tuhan Yang Maha Esa, karena atas berkat dan rahmat-Nya, modul ajar "Java Programming Lengkap dengan Praktikum" dapat diselesaikan dengan baik. Modul ini dirancang sebagai panduan komprehensif untuk mempelajari bahasa pemrograman Java, mulai dari konsep dasar hingga implementasi praktis.
Java merupakan salah satu bahasa pemrograman paling populer dan banyak digunakan di dunia. Dengan prinsip "Write Once, Run Anywhere", Java menjadi pilihan utama dalam pengembangan aplikasi enterprise, mobile (Android), desktop, dan berbagai platform lainnya.
Modul ini disusun secara sistematis dengan pendekatan pembelajaran berbasis praktikum. Setiap materi dilengkapi dengan:
Kami berharap modul ini dapat membantu mahasiswa, pengajar, dan praktisi dalam menguasai pemrograman Java. Kritik dan saran yang membangun sangat kami harapkan untuk penyempurnaan modul ini di masa mendatang.
Jakarta, Januari 2024
Tim Penyusun
Java dikembangkan oleh James Gosling dan timnya di Sun Microsystems pada tahun 1991. Awalnya bernama "Oak", kemudian diubah menjadi Java pada tahun 1995. Java dirancang dengan moto "Write Once, Run Anywhere" (WORA).
| Tahun | Perkembangan Java |
|---|---|
| 1991 | Proyek "Oak" dimulai oleh James Gosling |
| 1995 | Java 1.0 dirilis secara resmi |
| 1998 | Java 2 (J2SE 1.2) dengan Swing GUI |
| 2004 | Java 5 (Tiger) dengan generics, enum, foreach |
| 2011 | Java 7 dengan try-with-resources |
| 2014 | Java 8 dengan lambda expressions |
| 2017 | Java 9 dengan module system |
| 2018 | Java 10 dengan local variable type inference |
| 2024 | Java 21 (LTS terbaru) |
Tekan Windows + R, ketik "cmd" untuk Windows, atau buka Terminal di Mac/Linux
java -version
Output yang diharapkan:
javac -version
Output yang diharapkan:
public class NamaKelas { public static void main(String[] args) { // Kode program di sini System.out.println("Hello Java!"); } }
Gunakan text editor (Notepad, VS Code, IntelliJ, dll)
public class HelloWorld { public static void main(String[] args) { System.out.println("Selamat Datang di Java!"); System.out.println("Ini program pertamaku."); System.out.print("Belajar Java "); System.out.print("sangat menyenangkan!"); } }
javac HelloWorld.java
Jika berhasil, akan menghasilkan file HelloWorld.class
java HelloWorld
Gunakan IDE seperti Eclipse, IntelliJ IDEA, atau NetBeans untuk mempermudah development. IDE akan membantu dalam syntax highlighting, auto-completion, dan debugging.
sudo apt update sudo apt install openjdk-21-jdk java -version
brew install openjdk@21 java -version
Biasanya di: C:\Program Files\Java\jdk-21
Klik kanan This Computer β Properties β Advanced System Settings β Environment Variables
New System Variable: JAVA_HOME = C:\Program Files\Java\jdk-21
Tambah %JAVA_HOME%\bin ke PATH variable
public class CommandLineDemo { public static void main(String[] args) { System.out.println("Jumlah argument: " + args.length); if (args.length > 0) { System.out.println("Argument yang diberikan:"); for (int i = 0; i < args.length; i++) { System.out.println("args[" + i + "] = " + args[i]); } } else { System.out.println("Tidak ada argument yang diberikan"); } } }
Kompilasi dan jalankan:
javac CommandLineDemo.java java CommandLineDemo Hello World 123
Output:
Java membedakan huruf besar dan kecil. "nama" berbeda dengan "Nama" dan "NAMA".
Method main adalah entry point program Java. Harus ditulis persis:
public static void main(String[] args)
Blok kode diapit dengan kurung kurawal { }
public class Contoh { public static void main(String[] args) { { // Ini juga blok int x = 10; System.out.println(x); } // Variable x tidak bisa diakses di luar blok ini } }
public class SyntaxDemo { // Variable class (static) static int counter = 0; // Variable instance int instanceVar; // Constructor public SyntaxDemo(int value) { this.instanceVar = value; counter++; } // Method dengan parameter dan return value public int tambah(int a, int b) { int hasil = a + b; // Variable lokal return hasil; } // Static method public static void tampilkanCounter() { System.out.println("Counter: " + counter); } public static void main(String[] args) { // Membuat object SyntaxDemo obj1 = new SyntaxDemo(100); SyntaxDemo obj2 = new SyntaxDemo(200); // Memanggil method int jumlah = obj1.tambah(50, 30); System.out.println("Hasil penjumlahan: " + jumlah); // Mengakses variable System.out.println("Instance var obj1: " + obj1.instanceVar); System.out.println("Instance var obj2: " + obj2.instanceVar); // Memanggil static method tampilkanCounter(); // Block scope demonstration int x = 10; { int y = 20; // y hanya bisa diakses dalam blok ini System.out.println("x dalam blok: " + x); System.out.println("y dalam blok: " + y); } // System.out.println(y); // ERROR! y tidak dikenal di sini } }
Method printf() digunakan untuk output dengan format tertentu.
| Format Specifier | Deskripsi |
|---|---|
| %d | Integer desimal |
| %f | Float/double |
| %s | String |
| %c | Character |
| %b | Boolean |
| %n | New line |
public class OutputDemo { public static void main(String[] args) { // 1. println() - dengan baris baru System.out.println("Ini dengan println"); System.out.println("Ini baris kedua"); // 2. print() - tanpa baris baru System.out.print("Ini dengan print "); System.out.print("akan disambung"); System.out.println(); // pindah baris // 3. printf() - format output String nama = "Budi"; int umur = 20; double tinggi = 175.5; boolean aktif = true; System.out.printf("Nama: %s, Umur: %d tahun%n", nama, umur); System.out.printf("Tinggi: %.1f cm%n", tinggi); System.out.printf("Status aktif: %b%n", aktif); // 4. Format angka double harga = 1234567.89123; System.out.printf("Harga: Rp %,.2f%n", harga); // 5. Alignment System.out.printf("%-10s %10s %n", "Nama", "Nilai"); System.out.printf("%-10s %10d %n", "Budi", 85); System.out.printf("%-10s %10d %n", "Ani", 92); System.out.printf("%-10s %10d %n", "Candra", 78); // 6. Output dengan escape sequences System.out.println("Baris 1\nBaris 2"); // newline System.out.println("Tab\tantara kata"); // tab System.out.println("Backslash: \\"); // backslash System.out.println("Petik satu: \'"); // single quote System.out.println("Petik dua: \""); // double quote // 7. Output unicode System.out.println("Halo dalam berbagai bahasa:"); System.out.println("Indonesia: Selamat datang"); System.out.println("Jepang: γγγ«γ‘γ―"); System.out.println("China: δ½ ε₯½"); System.out.println("Korea: μλ νμΈμ"); // 8. Output dengan waktu System.out.printf("Tanggal: %tF%n", System.currentTimeMillis()); System.out.printf("Waktu: %tT%n", System.currentTimeMillis()); } }
Gunakan printf() untuk membuat output yang rapi dan terformat, terutama untuk membuat tabel atau laporan.
| Jenis | Syntax | Contoh |
|---|---|---|
| Single-line | // ... | // Ini komentar satu baris |
| Multi-line | /* ... */ | /* Ini komentar beberapa baris */ |
| Documentation (Javadoc) | /** ... */ | /** Dokumentasi untuk method atau class */ |
/** * Kelas Kalkulator untuk melakukan operasi matematika sederhana. * Kelas ini mendemonstrasikan penggunaan Javadoc comments. * * @author Tim Pengembang * @version 1.0 * @since 2024 */ public class Kalkulator { /** * Konstanta untuk nilai PI */ public static final double PI = 3.14159; /** * Menjumlahkan dua bilangan bulat. * * @param a bilangan pertama * @param b bilangan kedua * @return hasil penjumlahan a dan b */ public int tambah(int a, int b) { // Variable lokal untuk menyimpan hasil int hasil = a + b; return hasil; } /** * Menghitung luas lingkaran. * * @param jariJari jari-jari lingkaran * @return luas lingkaran * @throws IllegalArgumentException jika jariJari <= 0 */ public double luasLingkaran(double jariJari) { /* Validasi input Memastikan jari-jari bernilai positif */ if (jariJari <= 0) { throw new IllegalArgumentException("Jari-jari harus positif"); } // Menghitung luas: Ο * rΒ² return PI * jariJari * jariJari; } /** * Method utama untuk menjalankan program. * * @param args command line arguments */ public static void main(String[] args) { // Membuat objek kalkulator Kalkulator calc = new Kalkulator(); /* Demonstrasi penggunaan method Menampilkan hasil perhitungan */ System.out.println("5 + 3 = " + calc.tambah(5, 3)); System.out.println("Luas lingkaran r=7: " + calc.luasLingkaran(7)); } }
javadoc -d doc Kalkulator.java
tipeData namaVariable = nilai;
| Jenis | Scope | Contoh |
|---|---|---|
| Local | Di dalam method/blok | int x = 10; |
| Instance | Di dalam class, tanpa static | int umur; |
| Static | Di dalam class, dengan static | static int counter; |
public class VariableDemo { // Instance variables String nama; int umur; double gaji; // Static/Class variables static String perusahaan = "PT Java Corp"; static int jumlahKaryawan = 0; // Constructor public VariableDemo(String nama, int umur, double gaji) { this.nama = nama; this.umur = umur; this.gaji = gaji; jumlahKaryawan++; } // Method untuk menampilkan info public void tampilkanInfo() { // Local variables String jabatan = "Staf"; double bonus = gaji * 0.1; double totalGaji = gaji + bonus; System.out.println("=== Data Karyawan ==="); System.out.println("Nama: " + nama); System.out.println("Umur: " + umur + " tahun"); System.out.println("Jabatan: " + jabatan); System.out.printf("Gaji Pokok: Rp %,.2f%n", gaji); System.out.printf("Bonus: Rp %,.2f%n", bonus); System.out.printf("Total Gaji: Rp %,.2f%n", totalGaji); } public static void main(String[] args) { // Local variables di main int tahunSekarang = 2024; // Membuat object VariableDemo karyawan1 = new VariableDemo("Budi Santoso", 30, 5000000); VariableDemo karyawan2 = new VariableDemo("Ani Wijaya", 28, 6000000); VariableDemo karyawan3 = new VariableDemo("Citra Dewi", 32, 7500000); // Memanggil method karyawan1.tampilkanInfo(); System.out.println(); karyawan2.tampilkanInfo(); System.out.println(); karyawan3.tampilkanInfo(); // Mengakses static variable System.out.println("\n=== Informasi Perusahaan ==="); System.out.println("Nama Perusahaan: " + perusahaan); System.out.println("Tahun: " + tahunSekarang); System.out.println("Jumlah Karyawan: " + jumlahKaryawan); // Demonstrasi final variable (konstanta) final double PAJAK = 0.1; System.out.println("Pajak: " + (PAJAK * 100) + "%"); // PAJAK = 0.2; // ERROR! tidak bisa mengubah final variable // Demonstrasi block scope { int x = 100; System.out.println("x dalam blok: " + x); } // System.out.println(x); // ERROR! x tidak dikenal di sini } }
| Tipe | Ukuran | Range/Deskripsi | Default |
|---|---|---|---|
| byte | 1 byte | -128 s/d 127 | 0 |
| short | 2 byte | -32,768 s/d 32,767 | 0 |
| int | 4 byte | -2^31 s/d 2^31-1 | 0 |
| long | 8 byte | -2^63 s/d 2^63-1 | 0L |
| float | 4 byte | ~ Β±3.4E+38F | 0.0f |
| double | 8 byte | ~ Β±1.8E+308 | 0.0d |
| char | 2 byte | 0 s/d 65,535 (Unicode) | '\u0000' |
| boolean | 1 bit | true atau false | false |
public class DataTypesDemo { public static void main(String[] args) { System.out.println("=== Tipe Data Primitif ===\n"); // 1. Integer types byte b = 127; short s = 32767; int i = 2147483647; long l = 9223372036854775807L; System.out.println("byte : " + b + " (max: 127)"); System.out.println("short : " + s + " (max: 32767)"); System.out.println("int : " + i + " (max: 2.1M)"); System.out.println("long : " + l + " (max: 9.2E18)"); // 2. Floating point types float f = 3.14159f; double d = 3.141592653589793; System.out.println("\nfloat : " + f + " (presisi 6-7 digit)"); System.out.println("double : " + d + " (presisi 15 digit)"); // 3. Character type char c1 = 'A'; char c2 = 65; // ASCII value untuk 'A' char c3 = '\u0041'; // Unicode untuk 'A' System.out.println("\nchar : " + c1); System.out.println("char(65): " + c2); System.out.println("char(\\u0041): " + c3); // 4. Boolean type boolean bool1 = true; boolean bool2 = false; boolean bool3 = (10 > 5); System.out.println("\nboolean: " + bool1); System.out.println("boolean: " + bool2); System.out.println("boolean(10>5): " + bool3); // 5. Reference types String str = "Hello Java"; Integer num = 100; // Wrapper class Double price = 99.99; // Wrapper class Object obj = new Object(); int[] arr = {1, 2, 3, 4, 5}; System.out.println("\n=== Tipe Data Reference ==="); System.out.println("String : " + str); System.out.println("Integer: " + num); System.out.println("Double : " + price); System.out.println("Array : " + java.util.Arrays.toString(arr)); // 6. Literals System.out.println("\n=== Literals ==="); System.out.println("Binary 0b1010: " + 0b1010); // Binary literal System.out.println("Octal 012: " + 012); // Octal literal System.out.println("Hex 0xFF: " + 0xFF); // Hex literal System.out.println("Underscore: " + 1_000_000); // Underscore in numbers System.out.println("Scientific: " + 1.2e3); // Scientific notation // 7. Type ranges System.out.println("\n=== Range Tipe Data ==="); System.out.println("byte : " + Byte.MIN_VALUE + " s/d " + Byte.MAX_VALUE); System.out.println("short : " + Short.MIN_VALUE + " s/d " + Short.MAX_VALUE); System.out.println("int : " + Integer.MIN_VALUE + " s/d " + Integer.MAX_VALUE); System.out.println("long : " + Long.MIN_VALUE + " s/d " + Long.MAX_VALUE); System.out.println("float : " + Float.MIN_VALUE + " s/d " + Float.MAX_VALUE); System.out.println("double : " + Double.MIN_VALUE + " s/d " + Double.MAX_VALUE); } }
Konversi dari tipe data kecil ke besar - dilakukan otomatis
byte β short β int β long β float β double
Konversi dari tipe data besar ke kecil - harus manual
double β float β long β int β short β byte
public class CastingDemo { public static void main(String[] args) { System.out.println("=== Widening Casting (Otomatis) ===\n"); int intValue = 100; System.out.println("int value : " + intValue); long longValue = intValue; // Otomatis int -> long System.out.println("long value : " + longValue); float floatValue = intValue; // Otomatis int -> float System.out.println("float value : " + floatValue); double doubleValue = intValue; // Otomatis int -> double System.out.println("double value: " + doubleValue); System.out.println("\n=== Narrowing Casting (Manual) ===\n"); double d = 100.99; System.out.println("double value: " + d); float f = (float) d; // Manual casting double -> float System.out.println("float value : " + f); long l = (long) d; // Manual casting double -> long System.out.println("long value : " + l); int i = (int) d; // Manual casting double -> int System.out.println("int value : " + i); short s = (short) i; // Manual casting int -> short System.out.println("short value : " + s); byte b = (byte) i; // Manual casting int -> byte System.out.println("byte value : " + b); System.out.println("\n=== Casting dengan Overflow ===\n"); int besar = 130; byte kecil = (byte) besar; // Overflow karena byte max 127 System.out.println("int 130 -> byte: " + kecil); // -126 (overflow) double pi = 3.14159; int piInt = (int) pi; // Truncation (pemotongan, bukan pembulatan) System.out.println("double 3.14159 -> int: " + piInt); System.out.println("\n=== Casting dengan Char ===\n"); char ch = 'A'; int charInt = (int) ch; // char -> int (ASCII value) System.out.println("char 'A' -> int: " + charInt); // 65 int num = 66; char numChar = (char) num; // int -> char System.out.println("int 66 -> char: '" + numChar + "'"); // 'B' System.out.println("\n=== Casting String ke Numerik ===\n"); String strNumber = "123"; int parsedInt = Integer.parseInt(strNumber); double parsedDouble = Double.parseDouble(strNumber); System.out.println("String '123' -> int: " + parsedInt); System.out.println("String '123' -> double: " + parsedDouble); // Konversi numerik ke String int angka = 456; String strAngka = Integer.toString(angka); String strAngka2 = String.valueOf(angka); System.out.println("int 456 -> String: '" + strAngka + "'"); System.out.println("int 456 -> String: '" + strAngka2 + "'"); System.out.println("\n=== Casting Object ===\n"); Object obj = "Hello Java"; String strObj = (String) obj; // Downcasting object ke string System.out.println("Object -> String: " + strObj); // Instanceof untuk safety casting if (obj instanceof String) { String safeStr = (String) obj; System.out.println("Safe casting: " + safeStr); } } }
| Operator | Nama | Contoh |
|---|---|---|
| + | Penjumlahan | 5 + 3 = 8 |
| - | Pengurangan | 5 - 3 = 2 |
| * | Perkalian | 5 * 3 = 15 |
| / | Pembagian | 15 / 3 = 5 |
| % | Modulus | 7 % 3 = 1 |
=, +=, -=, *=, /=, %=
==, !=, >, <, >=, <=
&& (AND), || (OR), ! (NOT)
public class OperatorsDemo { public static void main(String[] args) { int a = 10, b = 3; System.out.println("=== Operator Aritmatika ==="); System.out.println("a = " + a + ", b = " + b); System.out.println("a + b = " + (a + b)); System.out.println("a - b = " + (a - b)); System.out.println("a * b = " + (a * b)); System.out.println("a / b = " + (a / b)); System.out.println("a % b = " + (a % b)); System.out.println("\n=== Operator Penugasan ==="); int x = 5; System.out.println("x = " + x); x += 3; System.out.println("x += 3 -> " + x); x -= 2; System.out.println("x -= 2 -> " + x); x *= 4; System.out.println("x *= 4 -> " + x); x /= 2; System.out.println("x /= 2 -> " + x); x %= 3; System.out.println("x %= 3 -> " + x); System.out.println("\n=== Operator Increment/Decrement ==="); int y = 5; System.out.println("y = " + y); System.out.println("y++ : " + y++ + " (post-increment)"); System.out.println("sekarang y = " + y); System.out.println("++y : " + ++y + " (pre-increment)"); System.out.println("sekarang y = " + y); System.out.println("\n=== Operator Perbandingan ==="); System.out.println("a == b: " + (a == b)); System.out.println("a != b: " + (a != b)); System.out.println("a > b : " + (a > b)); System.out.println("a < b : " + (a < b)); System.out.println("a >= b: " + (a >= b)); System.out.println("a <= b: " + (a <= b)); System.out.println("\n=== Operator Logika ==="); boolean p = true, q = false; System.out.println("p && q: " + (p && q)); System.out.println("p || q: " + (p || q)); System.out.println("!p : " + (!p)); System.out.println("\n=== Operator Ternary ==="); int umur = 20; String status = (umur >= 17) ? "Dewasa" : "Anak-anak"; System.out.println("Umur " + umur + " -> " + status); System.out.println("\n=== Operator Bitwise ==="); int m = 6; // 110 biner int n = 3; // 011 biner System.out.println("m & n : " + (m & n) + " (AND)"); System.out.println("m | n : " + (m | n) + " (OR)"); System.out.println("m ^ n : " + (m ^ n) + " (XOR)"); System.out.println("~m : " + (~m) + " (NOT)"); System.out.println("m << 1 : " + (m << 1) + " (shift left)"); System.out.println("m >> 1 : " + (m >> 1) + " (shift right)"); } }
Mengintegrasikan semua konsep Java yang telah dipelajari.
import java.util.ArrayList; import java.util.Scanner; /** * Kelas BankAccount sebagai class induk */ class BankAccount { protected String accountNumber; protected String accountName; protected double balance; protected double interestRate; protected static int totalAccounts = 0; public BankAccount(String accountNumber, String accountName, double initialDeposit) { this.accountNumber = accountNumber; this.accountName = accountName; this.balance = initialDeposit; this.interestRate = 0.02; // 2% default interest totalAccounts++; } public void deposit(double amount) { if (amount > 0) { balance += amount; System.out.printf("Deposit Rp %,.2f berhasil. Saldo sekarang: Rp %,.2f%n", amount, balance); } else { System.out.println("Jumlah deposit harus positif!"); } } public boolean withdraw(double amount) { if (amount <= 0) { System.out.println("Jumlah penarikan harus positif!"); return false; } if (amount > balance) { System.out.println("Saldo tidak mencukupi!"); return false; } balance -= amount; System.out.printf("Penarikan Rp %,.2f berhasil. Saldo sekarang: Rp %,.2f%n", amount, balance); return true; } public double getBalance() { return balance; } public void applyInterest() { double interest = balance * interestRate; balance += interest; System.out.printf("Bunga Rp %,.2f ditambahkan. Saldo baru: Rp %,.2f%n", interest, balance); } public void displayInfo() { System.out.println("\n=== Informasi Rekening ==="); System.out.println("Nomor Rekening: " + accountNumber); System.out.println("Nama Pemilik : " + accountName); System.out.printf("Saldo : Rp %,.2f%n", balance); System.out.printf("Suku Bunga : %.1f%%%n", interestRate * 100); } public static int getTotalAccounts() { return totalAccounts; } } /** * Kelas SavingsAccount (turunan dari BankAccount) */ class SavingsAccount extends BankAccount { private double minBalance; public SavingsAccount(String accountNumber, String accountName, double initialDeposit, double minBalance) { super(accountNumber, accountName, initialDeposit); this.minBalance = minBalance; this.interestRate = 0.04; // 4% untuk tabungan } @Override public boolean withdraw(double amount) { if (balance - amount < minBalance) { System.out.println("Penarikan gagal! Saldo minimal Rp " + minBalance + " harus dipertahankan."); return false; } return super.withdraw(amount); } @Override public void displayInfo() { super.displayInfo(); System.out.printf("Saldo Minimal : Rp %,.2f%n", minBalance); System.out.println("Jenis Rekening: Tabungan"); } } /** * Kelas Bank untuk mengelola koleksi rekening */ class Bank { private String bankName; private ArrayList<BankAccount> accounts; public Bank(String bankName) { this.bankName = bankName; this.accounts = new ArrayList<>(); } public void addAccount(BankAccount account) { accounts.add(account); System.out.println("Rekening berhasil ditambahkan."); } public BankAccount findAccount(String accountNumber) { for (BankAccount acc : accounts) { if (acc.accountNumber.equals(accountNumber)) { return acc; } } return null; } public void displayAllAccounts() { System.out.println("\n=== DAFTAR SEMUA REKENING DI " + bankName + " ==="); if (accounts.isEmpty()) { System.out.println("Belum ada rekening."); return; } for (int i = 0; i < accounts.size(); i++) { System.out.println("\n[" + (i + 1) + "] " + accounts.get(i).accountNumber + " - " + accounts.get(i).accountName); } System.out.println("\nTotal Rekening: " + BankAccount.getTotalAccounts()); } public void displayBankInfo() { System.out.println("\n=== INFORMASI BANK ==="); System.out.println("Nama Bank: " + bankName); System.out.println("Total Rekening: " + accounts.size()); double totalSaldo = 0; for (BankAccount acc : accounts) { totalSaldo += acc.getBalance(); } System.out.printf("Total Dana: Rp %,.2f%n", totalSaldo); } } /** * Main class untuk menjalankan aplikasi */ public class BankApp { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); Bank bank = new Bank("Bank Java"); while (true) { System.out.println("\n=== APLIKASI BANK JAVA ==="); System.out.println("1. Buat Rekening Baru"); System.out.println("2. Lihat Semua Rekening"); System.out.println("3. Deposit"); System.out.println("4. Withdraw"); System.out.println("5. Cek Saldo"); System.out.println("6. Informasi Bank"); System.out.println("7. Aplikasi Bunga"); System.out.println("0. Keluar"); System.out.print("Pilih menu: "); int pilihan = scanner.nextInt(); scanner.nextLine(); // consume newline switch (pilihan) { case 1: System.out.print("Masukkan nomor rekening: "); String noRek = scanner.nextLine(); System.out.print("Masukkan nama pemilik: "); String nama = scanner.nextLine(); System.out.print("Masukkan setoran awal: "); double setoran = scanner.nextDouble(); System.out.print("Jenis rekening (1. Biasa / 2. Tabungan): "); int jenis = scanner.nextInt(); if (jenis == 1) { BankAccount acc = new BankAccount(noRek, nama, setoran); bank.addAccount(acc); } else { System.out.print("Masukkan saldo minimal: "); double minSaldo = scanner.nextDouble(); SavingsAccount sav = new SavingsAccount(noRek, nama, setoran, minSaldo); bank.addAccount(sav); } break; case 2: bank.displayAllAccounts(); break; case 3: System.out.print("Masukkan nomor rekening: "); noRek = scanner.nextLine(); BankAccount acc = bank.findAccount(noRek); if (acc != null) { System.out.print("Masukkan jumlah deposit: "); double jumlah = scanner.nextDouble(); acc.deposit(jumlah); } else { System.out.println("Rekening tidak ditemukan!"); } break; case 4: System.out.print("Masukkan nomor rekening: "); noRek = scanner.nextLine(); acc = bank.findAccount(noRek); if (acc != null) { System.out.print("Masukkan jumlah penarikan: "); double jumlah = scanner.nextDouble(); acc.withdraw(jumlah); } else { System.out.println("Rekening tidak ditemukan!"); } break; case 5: System.out.print("Masukkan nomor rekening: "); noRek = scanner.nextLine(); acc = bank.findAccount(noRek); if (acc != null) { acc.displayInfo(); } else { System.out.println("Rekening tidak ditemukan!"); } break; case 6: bank.displayBankInfo(); break; case 7: System.out.print("Masukkan nomor rekening: "); noRek = scanner.nextLine(); acc = bank.findAccount(noRek); if (acc != null) { acc.applyInterest(); } else { System.out.println("Rekening tidak ditemukan!"); } break; case 0: System.out.println("Terima kasih telah menggunakan aplikasi bank."); System.out.println("Total transaksi hari ini: " + BankAccount.getTotalAccounts()); scanner.close(); System.exit(0); default: System.out.println("Pilihan tidak valid!"); } } } }
Soal 1: Tambahkan fitur transfer antar rekening
Soal 2: Buat class CheckingAccount dengan fitur overdraft
Soal 3: Tambahkan validasi nomor rekening unik
Soal 4: Buat laporan transaksi per rekening